      1  import java.awt.BorderLayout;

      2  import java.awt.GridLayout;

      3  import java.awt.event.ActionListener;

      4  import java.awt.event.ActionEvent;

      5  import javax.swing.JButton;

      6  import javax.swing.JFrame;

      7  import javax.swing.JPanel;

      8  import javax.swing.JLabel;

      9

     10  /**

     11     This frame contains a panel that displays buttons

     12     for a calculator and a panel with a text fields to

     13     specify the result of calculation. The operator

     14     buttons don't do anything--see Worked Example 1

     15     for a working calculator.

     16  */

     17  public class CalculatorFrame extends JFrame

     18  {

     19     private JLabel display;

     20

     21     private static final int FRAME_WIDTH = 300;

     22     private static final int FRAME_HEIGHT = 300;

     23

     24     public CalculatorFrame()

     25     {

     26        display = new JLabel("0");

     27        add(display, BorderLayout.NORTH);

     28        createButtonPanel();

     29        setSize(FRAME_WIDTH, FRAME_HEIGHT);

     30     }

     31

     32     /**

     33        Creates the button panel.

     34     */

     35     private void createButtonPanel()

     36     {

     37        JPanel buttonPanel = new JPanel();

     38        buttonPanel.setLayout(new GridLayout(4, 4));

     39

     40        buttonPanel.add(makeDigitButton("7"));

     41        buttonPanel.add(makeDigitButton("8"));

     42        buttonPanel.add(makeDigitButton("9"));

     43        buttonPanel.add(makeOperatorButton("/"));

     44        buttonPanel.add(makeDigitButton("4"));

     45        buttonPanel.add(makeDigitButton("5"));

     46        buttonPanel.add(makeDigitButton("6"));

     47        buttonPanel.add(makeOperatorButton("*"));

     48        buttonPanel.add(makeDigitButton("1"));

     49        buttonPanel.add(makeDigitButton("2"));

     50        buttonPanel.add(makeDigitButton("3"));

     51        buttonPanel.add(makeOperatorButton("-"));

     52        buttonPanel.add(makeDigitButton("0"));

     53        buttonPanel.add(makeDigitButton("."));

     54        buttonPanel.add(makeOperatorButton("="));

     55        buttonPanel.add(makeOperatorButton("+"));

     56

     57        add(buttonPanel, BorderLayout.CENTER);

     58     }

     59

     60     class DigitButtonListener implements ActionListener

     61     {

     62        private String digit;

     63

     64        /**

     65           Constructs a listener whose actionPerformed method adds a digit

     66           to the display.

     67           @param aDigit the digit to add

     68        */

     69        public DigitButtonListener(String aDigit)

     70        {

     71           digit = aDigit;

     72        }

     73

     74        public void actionPerformed(ActionEvent event)

     75        {

     76           display.setText(display.getText() + digit);

     77        }

     78     }

     79

     80     /**

     81        Makes a button representing a digit of a calculator.

     82        @param digit the digit of the calculator

     83        @return the button of the calculator

     84     */

     85     public JButton makeDigitButton(String digit)

     86     {

     87        JButton button = new JButton(digit);

     88

     89        ActionListener listener = new DigitButtonListener(digit);

     90        button.addActionListener(listener);

     91        return button;

     92     }

     93

     94     /**

     95        Makes a button representing an operator of a calculator.

     96        @param op the operator of the calculator

     97        @return the button of the calcalator

     98     */

     99     public JButton makeOperatorButton(String op)

    100     {

    101        JButton button = new JButton(op);

    102        return button;

    103     }

    104  }